﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using BasicForms;
using Lists;
using DevExpress.XtraPrinting;
using System.Data.SqlClient;
using GeneralLibs;
using ReportGenerators._1Clinic;
using CustomSecurity;

namespace ReportGenerators.CongNo
{
    public partial class FrmBangKeThuTienKhamBenh : BasicForms.FrmSupportPrintableComponents
    {
        public FrmBangKeThuTienKhamBenh()
        {
            InitializeComponent();
        }

        DsBaoCaoClinicChung dsChiTietVatTuTieuHao = new DsBaoCaoClinicChung();

        private void FrmBangKeThuTienKhamBenh_Load(object sender, EventArgs e)
        {
            if (DesignMode) return;
            try
            {
                cmbKyBaoCao.SelectedText = "Tùy chọn";

                #region cmbBacSy
                string maNhom = "BacSi";
                cmbBacSi.DataSource = UserList.Instance.GetDanhSachNguoiDungByMaNhom(maNhom).DefaultView;
                cmbBacSi.DisplayColumn = "FullName";
                cmbBacSi.ValueColumn = "ID";
                cmbBacSi.AddVisibleColumn("FullName", "Tên bác sĩ");
                #endregion

                #region cmbPhongBan
                cmbPhongBan.DataSource = DanhMucDoiTuongNghiepVu.GetDanhMucPhongBan().DataView;
                cmbPhongBan.DisplayColumn = "Ten";
                cmbPhongBan.ValueColumn = "ID";
                cmbPhongBan.AddVisibleColumn("Ma", "Mã", 100, 1);
                cmbPhongBan.AddVisibleColumn("Ten", "Tên", 320, 2);
                #endregion

                gridControl.DataSource = dsChiTietVatTuTieuHao.ChiTietVatTuTieuHao;
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }

        private void cmbKyBaoCao_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                FrmThamSoBaoCao.ThietLapKhoangThoiGianBaoCao(cmbKyBaoCao.Text, cmbKyBaoCao, dtNgayBatDau, dtNgayKetThuc);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
        }
        private void cmbBacSi_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete) cmbBacSi.EditValue = Guid.Empty;
        }
        private void cmbPhongBan_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete) cmbPhongBan.EditValue = Guid.Empty;
        }
        private void gridView_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (e.RowHandle >= 0)
                e.Info.DisplayText = (e.RowHandle).ToString();
        }

        private void btnLoad_Click(object sender, EventArgs e)
        {
            DateTime ngayBatDau = new DateTime(); if (LocalSettings.HeThong.CheDoBiKiemTra) ngayBatDau = DateTime.Now.AddDays(-2); else ngayBatDau = dtNgayBatDau.DateTime; //DateTime ngayBatDau = dtNgayBatDau.DateTime;
            DateTime ngayKetThuc = dtNgayKetThuc.DateTime;
            if (!(FrmThamSoBaoCao.CheckKyBaoCaoVaThoiDiemKhoaSo(dtNgayBatDau, dtNgayKetThuc))) return;
            string kyBaoCao = cmbKyBaoCao.Text;
            if (kyBaoCao == "Cả năm") kyBaoCao = "Năm " + GeneralLibs.Config.NamTaiChinh.ToString();
            else if (kyBaoCao == "Tùy chọn") kyBaoCao = string.Format("Từ ngày {0}/{1}/{2} đến ngày {3}/{4}/{5}",
                                       ngayBatDau.Day, ngayBatDau.Month, ngayBatDau.Year,
                                       ngayKetThuc.Day, ngayKetThuc.Month, ngayKetThuc.Year);

            SqlConnection con = new SqlConnection(GeneralLibs.LocalSettings.ConnectString);
            try
            {
                con.Open();
                SqlCommand cmd = con.CreateCommand();
                cmd.CommandTimeout = GeneralLibs.Config.TimeOut;

                //Các điều kiện tìm kiếm
                string bacSiCondition = "1 = 1";
                string phongBanCondition = "1 = 1";

                if (cmbBacSi.EditValue != null && (Guid)cmbBacSi.EditValue != Guid.Empty)
                    bacSiCondition = string.Format("A.BacSiID = '{0}'", cmbBacSi.EditValue);
                if (cmbPhongBan.EditValue != null && (Guid)cmbPhongBan.EditValue != Guid.Empty)
                    phongBanCondition = string.Format("A.PhongBanID = '{0}'", cmbPhongBan.EditValue);

                //Buil sql Query
                //2 trường hợp:: 
                //TH1: Hiện cả những dịch vụ k có trong danh mục vật tư tiêu hao. VD: Để xem quên tạo danh mục --> LEFT JOIN Clinic_VatTuTieuHao
                //TH2: Chỉ hiện những dịch vụ tiêu hao vật tư --> INNER JOIN Clinic_VatTuTieuHao thôi
                if (chkShowAll.Checked)  //TH1
                {
                    cmd.CommandText = string.Format("SELECT A.Ma MaPhieu, A.Ngay, C.Ma MaDV, C.Ten TenDV, C.DonViTinh,  \n" +
                                                    "	H.Ma MaHangHoa, H.Ten TenHangHoa, H.DonViTinh DVTHangHoa, G.SoLuong, \n" +
                                                    "	E.FullName BacSi, F.FullName ThuNgan, D.Ten PhongBan \n" +
                                                    "FROM Clinic_Phieu A INNER JOIN Clinic_KhoanMucPhieu B ON A.ID = B.PhieuID \n" +
                                                    "	INNER JOIN Clinic_DichVu C ON B.DichVuID = C.ID \n" +
                                                    "	LEFT JOIN DoiTuongNghiepVu D ON D.ID = A.PhongBanID \n" +
                                                    "	LEFT JOIN [User] E ON E.ID = A.BacSiID \n" +
                                                    "	LEFT JOIN [User] F ON F.ID = A.ThuNganID \n" +
                                                    "	LEFT JOIN Clinic_VatTuTieuHao G ON G.DichVuID = B.DichVuID \n" +
                                                    "	LEFT JOIN VatTuHangHoa H ON H.ID = G.VatTuHangHoa1ID \n" +
                                                    "WHERE {0} AND {1}\n" +
                                                    "	AND @ThoiDiemDau <= A.Ngay AND A.Ngay <= @ThoiDiemCuoi \n",
                                                    bacSiCondition, phongBanCondition);
                }
                else  //TH2
                {
                    cmd.CommandText = string.Format("SELECT A.Ma MaPhieu, A.Ngay, C.Ma MaDV, C.Ten TenDV, C.DonViTinh,  \n" +
                                                    "	H.Ma MaHangHoa, H.Ten TenHangHoa, H.DonViTinh DVTHangHoa, G.SoLuong, \n" +
                                                    "	E.FullName BacSi, F.FullName ThuNgan, D.Ten PhongBan \n" +
                                                    "FROM Clinic_Phieu A INNER JOIN Clinic_KhoanMucPhieu B ON A.ID = B.PhieuID \n" +
                                                    "	INNER JOIN Clinic_DichVu C ON B.DichVuID = C.ID \n" +
                                                    "	LEFT JOIN DoiTuongNghiepVu D ON D.ID = A.PhongBanID \n" +
                                                    "	LEFT JOIN [User] E ON E.ID = A.BacSiID \n" +
                                                    "	LEFT JOIN [User] F ON F.ID = A.ThuNganID \n" +
                                                    "	INNER JOIN Clinic_VatTuTieuHao G ON G.DichVuID = B.DichVuID \n" +
                                                    "	INNER JOIN VatTuHangHoa H ON H.ID = G.VatTuHangHoa1ID \n" +
                                                    "WHERE {0} AND {1}\n" +
                                                    "	AND @ThoiDiemDau <= A.Ngay AND A.Ngay <= @ThoiDiemCuoi \n",
                                                    bacSiCondition, phongBanCondition);
                }

                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@ThoiDiemDau", ngayBatDau);
                cmd.Parameters.AddWithValue("@ThoiDiemCuoi", ngayKetThuc);

                SqlDataAdapter da = new SqlDataAdapter(cmd);
                if (dsChiTietVatTuTieuHao != null) dsChiTietVatTuTieuHao.ChiTietVatTuTieuHao.Clear();
                da.Fill(dsChiTietVatTuTieuHao.ChiTietVatTuTieuHao);

                FormatNumberInGridView(gridView);
            }
            catch (Exception ex)
            {
                BasicForms.FrmExceptionNotifier.ShowAndLog(ex);
            }
            finally
            {
                con.Close();
                con = null;
            }
        }

        private void btnPreview_Click(object sender, EventArgs e)
        {
            string option1 = string.Format("Từ {0}:{1} ngày {2}/{3}/{4} đến {5}:{6} ngày {7}/{8}/{9}",
                             dtNgayBatDau.DateTime.Hour, dtNgayBatDau.DateTime.Minute,
                             dtNgayBatDau.DateTime.Day, dtNgayBatDau.DateTime.Month, dtNgayBatDau.DateTime.Year,
                             dtNgayKetThuc.DateTime.Hour, dtNgayKetThuc.DateTime.Minute,
                             dtNgayKetThuc.DateTime.Day, dtNgayKetThuc.DateTime.Month, dtNgayKetThuc.DateTime.Year);

            gridView.OptionsPrint.MaxMergedCellHeight = -1;  //Để in ra cũng merge cell y như gridcontrol
            PrintWithHeaderAndFooter(true, gridControl, true, true, "Bảng kê chi tiết vật tư tiêu hao theo dịch vụ", option1, "", "", "");
        }
    }
}
